//
//  StatusListViewModel.swift
//  01- 搭建框架
//
//  Created by apple on 15/10/19.
//  Copyright © 2015年 任伟. All rights reserved.
//

//** viewModel不需要继承任何东西

import Foundation
import SDWebImage

/// 微博数据列表模型 封装网络方法
class StatusListViewModel {
    
    /// 微博数据数组  - 上拉/下拉刷新
    lazy var statusList = [StatusViewModel]()
    
    /// 加载网络数据
    func loadStatus(isPullup isPullup: Bool, finished: (isSuccessed: Bool)->()) {
        
        // 下拉刷新 id
        let since_id = isPullup ? 0 : (statusList.first?.status.id ?? 0)
        // 上拉刷新 id
        let max_id = isPullup ? (statusList.last?.status.id ?? 0) : 0
        
        NetworkTools.sharedTools.loadStatus(since_id: since_id, max_id: max_id) { (result, error) -> () in
            if error != nil {
                print("出错了")
                
                finished(isSuccessed: false)
                return
            }
            
            // 判断 result 的数据结构是否正确
            guard let array = result?["statuses"] as? [[String: AnyObject]] else {
                print("数据格式错误")
                
                finished(isSuccessed: false)
                return
            }
            
            /// -- 测试缓存网络数据 --
            StatusDAL.saveCacheData(array)
            
            /// -- 检查本地数据 --
            // TODO: ---待完成
            StatusDAL.checkCacheData(since_id, max_id: max_id)
            
            
            
            // 遍历字典的数据, 转模型
            // 可变数组
            var dataList = [StatusViewModel]()
            
            // 遍历数组
            for dict in array {
                dataList.append(StatusViewModel(status: Status(dict: dict)))
            }
            
            print("刷新到 \(dataList.count) 条数据")
            // 凭借数据
            if max_id > 0 {
                self.statusList += dataList
            }else {
                self.statusList = dataList + self.statusList
            }
            
            
            
            // 缓冲单张图片
            self.cacheSingleImage(dataList, finished:finished)

        }
    }
    
    
    /// 缓冲单张图片
    private func cacheSingleImage(dataList: [StatusViewModel], finished: (isSuccessed: Bool) -> ()) {
        
        // 创建调度组
        let group = dispatch_group_create()
        // 缓冲数据长度
        var dataLength = 0
        
        // 1. 遍历视图模型的数组
        for vm in dataList {
            
            // 判断是否为单张图像
            if vm.thumbnailUrls?.count != 1 {
                continue
            }
            
            //  获取 url
            let url = vm.thumbnailUrls![0]
            print("要缓冲的\(url)")
            
            // 入组
            dispatch_group_enter(group)
            // 下载图片
            SDWebImageManager.sharedManager().downloadImageWithURL(url,
                options: [//SDWebImageOptions.RetryFailed, SDWebImageOptions.RefreshCached
                ],
                progress: nil,
                completed: { (image, _, _, _, _) -> Void in
                    
                    // 单张图片下载完成
                    if let img = image, let data = UIImagePNGRepresentation(img) {
                        
                        // 累加二进制下载完成 - 计算长度
                        dataLength += data.length
                        
                        //print(data.length)
                    }
                    
                    // 出组
                    dispatch_group_leave(group)
            })
        }
        
        // 监听调度组完成
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            print("缓冲完成 \(dataLength / 1024) k")
            
            finished(isSuccessed: true)
        }
    
    }
}